昨天我們討論到如何一一存取串列中的元素,今天我們要來學的是如何用迴圈印出串列中的所有元素,一開始我們會先學到for迴圈,那麼甚麼是for迴圈呢 ? for迴圈在電腦科學是一種程式語言的疊代陳述,能夠讓程式碼反覆的執行,它跟其他的迴圈,如while迴圈,最大的不同,是它擁有一個迴圈計數器,或是迴圈變數。這使得for迴圈能夠知道在疊代過程中的執行順序
範例如下 :
students=["bonny","jack","rose"] # 建立一個students串列
for student in students : # 告知python從students串列中取出名字,並將取出的名字存到student變數內
print(student) # 印出student變數取到的名字
print("hello !") # 跳出迴圈並印出hello
輸出結果 :
bonny
jack
rose
hello !
所以說for迴圈到底是怎麼運作的 ?為甚麼可以一一擷取串列中的元素然後印出 ? 其實迴圈它是這樣跑的,在程式執行的一開始先讀到
for student in students :
這行程式會讓python去students串列中擷取第一個值,也就是"bonny"這個值,將它存入student變數內後,python會跑到下一行將student變數存到的值印出
print(student) # 印出bonny
因為students串列中還有其他的元素,所以在印出student變數的值過後,python會再跳回for迴圈去印其他的值
for student in students :
在跳回for迴圈的後,python會讓for迴圈去擷取第二個值,也就是"jack",擷取到一個值將它存到student變數中過後,就跳到迴圈下一行將其印出
print(student) #印出jack
當for迴圈擷取完串列裡所有的元素後,python就會跳出迴圈,然後再印出迴圈外的hello字串
迴圈內執行的東西要記得縮排,若不是迴圈內要執行的東西則不用縮排 !
range()函式能輕鬆的產生一系列的數字
範例如下 :
for number in range(1,7):
print(number)
上面這段程式看起來是要印1到7,但實際上它是印1到6,7是不會被印出的,因為range()函式會讓python從指定的第一個值開始算起,到指定的第二個值就停止,因此輸出並不含第二個值
輸出結果:
1
2
3
4
5
6
若是要讓數字存到串列中,可以使用list()函式把range()函式的結果直接轉成串列,用法是把range()函式當成參數包在list()函式裡
範例如下 :
odd_numbers=list(range(1,10,2))
print(odd_numbers)
上面這段程式碼是要印出1~10之間的奇數,第一行程式碼的range(1,10,2)是在說建立一個從1開始間隔是2到10就停止的數列,然後再用list()函式包住range()函式,使range()函式建立出來的數列變成數字串列,第二行就是把值印出
輸出結果 :
[1,3,5,7,9]
擷取串列中某部分的內容我們在python中稱之為切片,切片的用法是需要指定使用的第一個元素和最後一個元素的索引足標,和range()函式用法一樣,切片的處理範圍不含第二個索引足標的元素
但是有兩點要注意 :
1.沒有指定第一個元素的索引足標則從0開始計算
2.沒有指定最後一個元素的索引足標則視為切到最後一位
範例如下 :
colors=["red","orange","yellow","green","blue"]
print(colors[0:3]) # 印出索引足標0,1,2對應的元素
print(colors[1:4]) # 印出索引足標1,2,3對應的元素
print(colors[:2]) # 印出從索引足標0到1的元素
print(colors[2:]) # 印出從索引足標2到最後的元素
print(colors[-2:]) # 印出從索引足標-2(也就是倒數第二個)到最後的元素
輸出結果 :
["red","orange","yellow"]
["orange","yellow","green"]
["red","orange"]
["yellow","green","blue"]
["green","blue"]
範例如下 :
colors=["red","orange","yellow","green","blue"]
for color in colors[1:3] : # 印出colors串列中索引足標1和2的元素
print(color)
上面程式碼用法和一開始說的用for迴圈印串列大致上是一樣的,不一樣的地方只有它會告訴python是在切片串列中取出元素,然後再存到變數中,所以輸出結果如下 :
orange
yellow
有些時候我們會以一個串列為基底,然後去建立一個新的串列,複製串列在python中的做法就是不放起始和結尾的索引足標,只留一個冒號在括號中,這樣就可以複製整個串列了
範例如下 :
my_pets=["dog","cat","bird"] # 建立一個my_pets串列
friend_pets=my_pets[:] # 將my_pets串列複製到friend_pets串列
print("My pets :")
print(my_pets) # 印出my_pets串列
print("Friend's pets :")
print(friend_pets) # 印出friend_pets串列
輸出結果 :
My pets :
["dog","cat","bird"]
Friend's pets :
["dog","cat","bird"]
為了證明這分別是兩個串列,我們也可以個別新增元素到my_pets跟friend_pets裡
範例如下 :
my_pets=["dog","cat","bird"] # 建立一個my_pets串列
friend_pets=my_pets[:] # 將my_pets串列複製到friend_pets串列
my_pets.append("rabbit") # 新增一個元素到my_pets串列
friend_pets.append("turtle") # 新增一個元素到friend_pets串列
print("My pets :")
print(my_pets) # 印出my_pets串列
print("Friend's pets :")
print(friend_pets) # 印出friend_pets串列
輸出結果 :
My pets :
["dog","cat","bird","rabbit"]
Friend's pets :
["dog","cat","bird","turtle"]
有時候我們會建立一個不能修改的資料集合,而這個不可變的串列我們就叫它多元組,多元組跟串列很像,唯一不同的是串列是用中括號[ ],多元組是用小括號( ),定義完多元組後我們可以用索引足標來取得元素,做法和串列相同
我們可以舉個生日的例子來建立一個多元組,因為生日是不會被改變的 !
範例如下 :
birthday=("1224","0801","0617") # 定義一個多元組
print(birthday[0]) # 印出多元組第一個元素
輸出結果 :
1224
處理方式和串列一樣,我們使用for迴圈來拜訪多元組
birthday=("1224","0801","0617") # 定義一個多元組
for day in birthday : # 在birthday多元組中取得元素再存到day變數裡
print(day) # 印出變數存到的值
輸出結果 :
1224
0801
0617
多元組是無法直接被更改的,如果想要改變原本多元組的值,我們可以重寫它,就是可以把新的值指定給存放多元組的變數內
範例如下 :
numbers=(1,2,3) # 定義一個多元組
print("Original :")
for number in numbers : # 在numbers多元組中取得元素再存到number變數中
print(number) # 印出變數存到的值
numbers=(4,5,6) # 讓原本多元組(1,2,3)的值改為(4,5,6)
print("Modified :")
for number in numbers :
print(number)
輸出結果 :
Original :
1
2
3
Modified :
4
5
6
附上排版較優美的
HackMD網址 :https://hackmd.io/ZPo67I8uRteSWF-G9Vdsow?both
資料來源:<<python程式設計的樂趣>>-Eric Matthes著/H&C譯
你好,請教一下我在執行 這段的時候,為什麼會有錯誤訊息呢?
numbers=(1,2,3) # 定義一個多元組
print("Original :")
for number in numbers : # 在numbers多元組中取得元素再存到number變數中
print(number) # 印出變數存到的值
numbers=(4,5,6) # 讓原本多元組(1,2,3)的值改為(4,5,6)
print("Modified :")
for number in numbers :
print(number)
--------以下是我打出來的-------
numbers=(1,2,3)
print("Original :")
Original :
for number in numbers :
print(number)
numbers=(4,5,6)
print("Modified :")
for number in numbers :
print(number)
SyntaxError: expected an indented block after 'for' statement on line 5